package com.foreknow.demo21;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class PersonManager {
    public List<Person> getQueryAll() {
        //创建一个新的集合
        List<Person> list = new ArrayList<>();
        Person person = new Person();
        person.setName("fender");
        list.add(person);
        return list;
    }

    public void getMethod(List<Person> list) {
        for(int i = 0;i<list.size();i++){
            Person person = list.get(i);
            System.out.println(person.getName());
        }
    }

    public static void main(String[] args) {
        PersonManager personManager = new PersonManager();
        //    List<Person> list = personManager.getQueryAll();
        //    for(int i = 0;i<list.size();i++){
        //      Person person = list.get(i);
        //      System.out.println(person.getName());
        //    }


//        List<Person> list = new ArrayList<>();
//        Person person = new Person();
//        person.setName("fender");
//        list.add(person);
//        personManager.getMethod(list);
//
        List<Person> list1 = new ArrayList<>();
        Person p1 = new Person();
        p1.setName("fender");
        Person p2 = new Person();
        p2.setName("jazz");
        list1.add(p1);
        list1.add(p2);

        System.out.println("--------------如何遍历集合--------------");
        //如何遍历集合
        for(int i = 0;i<list1.size();i++){
            Person person = list1.get(i);
            System.out.println(person.getName());
        }

        System.out.println("--------------foreach遍历集合--------------");
        for (Person person:list1) {
            System.out.println(person.getName());
        }

        System.out.println("--------------迭代器(Iterator)遍历集合--------------");
        //Iterator中的常用方法
        //   1. boolean	hasNext()
        //    如果仍有元素可以迭代，则返回 true。
        //   2. E	next()
        //    返回迭代的下一个元素。
        Iterator<Person> iterator = list1.iterator();
        while (iterator.hasNext()){
            Person person = iterator.next();
            System.out.println(person.getName());
        }


        //从条件上来讲
        //1. for循环要知道集合和数组的大小，而且需要有序的，不然就没有办法去遍历
        //2. foreach和iterator不需要知道集合或数组的大小，他们都是得到集合内的每个元素，然后进行处理的
        //从用法上来讲
        //1. for循环一般用来处理比较简单的有序的，可获知大小的集合或数组
        //2. foreach可用于遍历任何集合或数组，而且操作简单。
        //3. Iterator是最强大的，你可以随时修改或删除集合内的元素，并且是在不需要知道元素和集合大小的情况下进行的
        //4. 当你需要对不同的容器实现同样的遍历方式的时候，可以使用迭代器

        //从效率上来说，同样遍历一个集合，iterator和foreach不相上下。


    }
}